(self.webpackChunkpeaches=self.webpackChunkpeaches||[]).push([[6963],{31613:function(e,t,r){"use strict";r.d(t,{N:function(){return GrowthBook}});var i,n,s=/^[a-zA-Z:_][a-zA-Z0-9:_.-]*$/,a={revert:function(){}},u=new Map,o=new Set;function getElementRecord(e){var t=u.get(e);return t||(t={element:e,attributes:{}},u.set(e,t)),t}function createElementPropertyRecord(e,t,r,i,n){var s=r(e),a={isDirty:!1,originalValue:s,virtualValue:s,mutations:[],el:e,_positionTimeout:null,observer:new MutationObserver(function(){if("position"!==t||!a._positionTimeout){"position"===t&&(a._positionTimeout=setTimeout(function(){a._positionTimeout=null},1e3));var i=r(e);("position"!==t||i.parentNode!==a.virtualValue.parentNode||i.insertBeforeNode!==a.virtualValue.insertBeforeNode)&&i!==a.virtualValue&&(a.originalValue=i,n(a))}}),mutationRunner:n,setValue:i,getCurrentValue:r};return"position"===t&&e.parentNode?a.observer.observe(e.parentNode,{childList:!0,subtree:!0,attributes:!1,characterData:!1}):a.observer.observe(e,"html"===t?{childList:!0,subtree:!0,attributes:!0,characterData:!0}:{childList:!1,subtree:!1,attributes:!0,attributeFilter:[t]}),a}function queueIfNeeded(e,t){var r=t.getCurrentValue(t.el);t.virtualValue=e,e&&"string"!=typeof e?r&&e.parentNode===r.parentNode&&e.insertBeforeNode===r.insertBeforeNode||(t.isDirty=!0,runDOMUpdates()):e!==r&&(t.isDirty=!0,runDOMUpdates())}function htmlMutationRunner(e){var t,r=e.originalValue;e.mutations.forEach(function(e){return r=e.mutate(r)}),queueIfNeeded((t=r,i||(i=document.createElement("div")),i.innerHTML=t,i.innerHTML),e)}function classMutationRunner(e){var t=new Set(e.originalValue.split(/\s+/).filter(Boolean));e.mutations.forEach(function(e){return e.mutate(t)}),queueIfNeeded(Array.from(t).filter(Boolean).join(" "),e)}function attrMutationRunner(e){var t=e.originalValue;e.mutations.forEach(function(e){return t=e.mutate(t)}),queueIfNeeded(t,e)}function positionMutationRunner(e){var t=e.originalValue;e.mutations.forEach(function(e){t=function(e){var t=e.parentSelector,r=e.insertBeforeSelector,i=document.querySelector(t);if(!i)return null;var n=r?document.querySelector(r):null;return r&&!n?null:{parentNode:i,insertBeforeNode:n}}(e.mutate())||t}),queueIfNeeded(t,e)}var getHTMLValue=function(e){return e.innerHTML},setHTMLValue=function(e,t){return e.innerHTML=t};function getElementHTMLRecord(e){var t=getElementRecord(e);return t.html||(t.html=createElementPropertyRecord(e,"html",getHTMLValue,setHTMLValue,htmlMutationRunner)),t.html}var getElementPosition=function(e){return{parentNode:e.parentElement,insertBeforeNode:e.nextElementSibling}},setElementPosition=function(e,t){(!t.insertBeforeNode||t.parentNode.contains(t.insertBeforeNode))&&t.parentNode.insertBefore(e,t.insertBeforeNode)};function getElementPositionRecord(e){var t=getElementRecord(e);return t.position||(t.position=createElementPropertyRecord(e,"position",getElementPosition,setElementPosition,positionMutationRunner)),t.position}var setClassValue=function(e,t){return t?e.className=t:e.removeAttribute("class")},getClassValue=function(e){return e.className};function getElementClassRecord(e){var t=getElementRecord(e);return t.classes||(t.classes=createElementPropertyRecord(e,"class",getClassValue,setClassValue,classMutationRunner)),t.classes}function getElementAttributeRecord(e,t){var r=getElementRecord(e);return r.attributes[t]||(r.attributes[t]=createElementPropertyRecord(e,t,function(e){var r;return null!=(r=e.getAttribute(t))?r:null},function(e,r){return null!==r?e.setAttribute(t,r):e.removeAttribute(t)},attrMutationRunner)),r.attributes[t]}function setPropertyValue(e,t,r){if(r.isDirty){r.isDirty=!1;var i,n,s,a,o,c,l,h,d,f,p=r.virtualValue;!r.mutations.length&&(f=u.get(e))&&("html"===t?(null==(i=f.html)||null==(n=i.observer)||n.disconnect(),delete f.html):"class"===t?(null==(s=f.classes)||null==(a=s.observer)||a.disconnect(),delete f.classes):"position"===t?(null==(o=f.position)||null==(c=o.observer)||c.disconnect(),delete f.position):(null==(l=f.attributes)||null==(h=l[t])||null==(d=h.observer)||d.disconnect(),delete f.attributes[t])),r.setValue(e,p)}}function setValue(e,t){e.html&&setPropertyValue(t,"html",e.html),e.classes&&setPropertyValue(t,"class",e.classes),e.position&&setPropertyValue(t,"position",e.position),Object.keys(e.attributes).forEach(function(r){setPropertyValue(t,r,e.attributes[r])})}function runDOMUpdates(){u.forEach(setValue)}function refreshElementsSet(e){if("position"!==e.kind||1!==e.elements.size){var t=new Set(e.elements);document.querySelectorAll(e.selector).forEach(function(r){if(!t.has(r)){var i;e.elements.add(r),i=null,"html"===e.kind?i=getElementHTMLRecord(r):"class"===e.kind?i=getElementClassRecord(r):"attribute"===e.kind?i=getElementAttributeRecord(r,e.attribute):"position"===e.kind&&(i=getElementPositionRecord(r)),i&&(i.mutations.push(e),i.mutationRunner(i))}})}}function refreshAllElementSets(){o.forEach(refreshElementsSet)}function newMutation(e){return"undefined"==typeof document?a:(o.add(e),refreshElementsSet(e),{revert:function(){e.elements.forEach(function(t){return function(e,t){var r=null;if("html"===e.kind?r=getElementHTMLRecord(t):"class"===e.kind?r=getElementClassRecord(t):"attribute"===e.kind?r=getElementAttributeRecord(t,e.attribute):"position"===e.kind&&(r=getElementPositionRecord(t)),r){var i=r.mutations.indexOf(e);-1!==i&&r.mutations.splice(i,1),r.mutationRunner(r)}}(e,t)}),e.elements.clear(),o.delete(e)}})}function html(e,t){return newMutation({kind:"html",elements:new Set,mutate:t,selector:e})}function position(e,t){return newMutation({kind:"position",elements:new Set,mutate:t,selector:e})}function classes(e,t){return newMutation({kind:"class",elements:new Set,mutate:t,selector:e})}function attribute(e,t,r){return s.test(t)?"class"===t||"className"===t?classes(e,function(e){var t=r(Array.from(e).join(" "));e.clear(),t&&t.split(/\s+/g).filter(Boolean).forEach(function(t){return e.add(t)})}):newMutation({kind:"attribute",attribute:t,elements:new Set,mutate:r,selector:e}):a}"undefined"!=typeof document&&(n||(n=new MutationObserver(function(){refreshAllElementSets()})),refreshAllElementSets(),n.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!1,characterData:!1}));var c={html:html,classes:classes,attribute:attribute,position:position,declarative:function(e){var t=e.selector,r=e.action,i=e.value,n=e.attribute,s=e.parentSelector,u=e.insertBeforeSelector;if("html"===n){if("append"===r)return html(t,function(e){return e+(null!=i?i:"")});if("set"===r)return html(t,function(){return null!=i?i:""})}else if("class"===n){if("append"===r)return classes(t,function(e){i&&e.add(i)});if("remove"===r)return classes(t,function(e){i&&e.delete(i)});if("set"===r)return classes(t,function(e){e.clear(),i&&e.add(i)})}else if("position"===n){if("set"===r&&s)return position(t,function(){return{insertBeforeSelector:u,parentSelector:s}})}else{if("append"===r)return attribute(t,n,function(e){return null!==e?e+(null!=i?i:""):null!=i?i:""});if("set"===r)return attribute(t,n,function(){return null!=i?i:""});if("remove"===r)return attribute(t,n,function(){return null})}return a}};function hashFnv32a(e){let t=2166136261,r=e.length;for(let i=0;i>>0}function hash(e,t,r){return 2===r?hashFnv32a(hashFnv32a(e+t)+"")%1e4/1e4:1===r?hashFnv32a(t+e)%1e3/1e3:null}function inRange(e,t){return e>=t[0]&&e{i.push([e.searchParams.get(r)||"",t,!1])}),!i.some(e=>!function(e,t,r){try{let i=t.replace(/[*.+?^${}()|[\]\\]/g,"\\$&").replace(/_____/g,".*");r&&(i="\\/?"+i.replace(/(^\/|\/$)/g,"")+"\\/?");let n=RegExp("^"+i+"$","i");return n.test(e)}catch(e){return!1}}(e[0],e[1],e[2]))}catch(e){return!1}}(i,r);return!1}catch(e){return!1}}(e,t[n].type,t[n].pattern);if(!1===t[n].include){if(s)return!1}else r=!0,s&&(i=!0)}return i||!r}let base64ToBuf=e=>Uint8Array.from(atob(e),e=>e.charCodeAt(0));async function decrypt(e,t,r){if(t=t||"",!(r=r||globalThis.crypto&&globalThis.crypto.subtle))throw Error("No SubtleCrypto implementation found");try{let i=await r.importKey("raw",base64ToBuf(t),{name:"AES-CBC",length:128},!0,["encrypt","decrypt"]),[n,s]=e.split("."),a=await r.decrypt({name:"AES-CBC",iv:base64ToBuf(n)},i,base64ToBuf(s));return new TextDecoder().decode(a)}catch(e){throw Error("Failed to decrypt")}}function util_toString(e){return"string"==typeof e?e:JSON.stringify(e)}function paddedVersionString(e){"number"==typeof e&&(e+=""),e&&"string"==typeof e||(e="0");let t=e.replace(/(^v|\+.*$)/g,"").split(/[-.]/);return 3===t.length&&t.push("~"),t.map(e=>e.match(/^[0-9]+$/)?e.padStart(5," "):e).join("-")}let l={};function evalCondition(e,t){if("$or"in t)return evalOr(e,t.$or);if("$nor"in t)return!evalOr(e,t.$nor);if("$and"in t)return function(e,t){for(let r=0;rpaddedVersionString(r);case"$vgte":return paddedVersionString(t)>=paddedVersionString(r);case"$vlt":return paddedVersionString(t)r;case"$gte":return t>=r;case"$exists":return r?null!=t:null==t;case"$in":if(!Array.isArray(r))return!1;return isIn(t,r);case"$nin":if(!Array.isArray(r))return!1;return!isIn(t,r);case"$not":return!evalConditionValue(r,t);case"$size":if(!Array.isArray(t))return!1;return evalConditionValue(r,t.length);case"$elemMatch":return function(e,t){if(!Array.isArray(e))return!1;let r=isOperatorObject(t)?e=>evalConditionValue(t,e):e=>evalCondition(e,t);for(let t=0;t0&&t.filter(e=>"$"===e[0]).length===t.length}function isIn(e,t){return Array.isArray(e)?e.some(e=>t.includes(e)):t.includes(e)}function evalOr(e,t){if(!t.length)return!0;for(let r=0;r{let{host:t,clientKey:r,headers:i}=e;return d.fetch("".concat(t,"/api/features/").concat(r),{headers:i})},fetchRemoteEvalCall:e=>{let{host:t,clientKey:r,payload:i,headers:n}=e,s={method:"POST",headers:{"Content-Type":"application/json",...n},body:JSON.stringify(i)};return d.fetch("".concat(t,"/api/eval/").concat(r),s)},eventSourceCall:e=>{let{host:t,clientKey:r,headers:i}=e;return i?new d.EventSource("".concat(t,"/sub/").concat(r),{headers:i}):new d.EventSource("".concat(t,"/sub/").concat(r))},startIdleListener:()=>{let e;let t="undefined"!=typeof window&&"undefined"!=typeof document;if(!t)return;let onVisibilityChange=()=>{"visible"===document.visibilityState?(window.clearTimeout(e),y.forEach(e=>{e&&"idle"===e.state&&enableChannel(e)})):"hidden"===document.visibilityState&&(e=window.setTimeout(onHidden,h.idleStreamInterval))};return document.addEventListener("visibilitychange",onVisibilityChange),()=>document.removeEventListener("visibilitychange",onVisibilityChange)},stopIdleListener:()=>{}};try{globalThis.localStorage&&(d.localStorage=globalThis.localStorage)}catch(e){}let p=new Map,g=!1,m=new Map,_=new Map,y=new Map,v=new Set;async function refreshFeatures(e,t,r,i,n,s){s||(h.backgroundSync=!1);let a=await fetchFeaturesWithCache(e,i,t,r);n&&a&&await refreshInstance(e,a)}function onHidden(){y.forEach(e=>{e&&(e.state="idle",disableChannel(e))})}async function updatePersistentCache(){try{if(!d.localStorage)return;await d.localStorage.setItem(h.cacheKey,JSON.stringify(Array.from(m.entries())))}catch(e){}}async function fetchFeaturesWithCache(e,t,r,i){var n;let s=getKey(e),a=getCacheKey(e),u=new Date,o=new Date(u.getTime()-h.maxAge+h.staleTTL);await initializeCache();let c=m.get(a);return c&&!i&&(t||c.staleAt>u)&&c.staleAt>o?(c.sse&&v.add(s),c.staleAt{let t,i=!1,finish=r=>{i||(i=!0,t&&clearTimeout(t),e(r||null))};r&&(t=setTimeout(()=>finish(),r)),n.then(e=>finish(e)).catch(()=>finish())}))}function getKey(e){let[t,r]=e.getApiInfo();return"".concat(t,"||").concat(r)}function getCacheKey(e){let t=getKey(e);if(!e.isRemoteEval())return t;let r=e.getAttributes(),i=e.getCacheKeyAttributes()||Object.keys(e.getAttributes()),n={};i.forEach(e=>{n[e]=r[e]});let s=e.getForcedVariations(),a=e.getUrl();return"".concat(t,"||").concat(JSON.stringify({ca:n,fv:s,url:a}))}async function initializeCache(){if(!g){g=!0;try{if(d.localStorage){let e=await d.localStorage.getItem(h.cacheKey);if(e){let t=JSON.parse(e);t&&Array.isArray(t)&&t.forEach(e=>{let[t,r]=e;m.set(t,{...r,staleAt:new Date(r.staleAt)})}),cleanupCache()}}}catch(e){}if(!h.disableIdleStreams){let e=f.startIdleListener();e&&(f.stopIdleListener=e)}}}function cleanupCache(){let e=Array.from(m.entries()).map(e=>{let[t,r]=e;return{key:t,staleAt:r.staleAt.getTime()}}).sort((e,t)=>e.staleAt-t.staleAt),t=Math.min(Math.max(0,m.size-h.maxEntries),m.size);for(let r=0;rrefreshInstance(e,r))}async function refreshInstance(e,t){t=await e.decryptPayload(t,void 0,d.SubtleCrypto),await e.refreshStickyBuckets(t),e.setFeatures(t.features||e.getFeatures()),e.setExperiments(t.experiments||e.getExperiments())}async function fetchFeatures(e){let{apiHost:t,apiRequestHeaders:r}=e.getApiHosts(),i=e.getClientKey(),n=e.isRemoteEval(),s=getKey(e),a=getCacheKey(e),u=_.get(a);if(!u){let o=n?f.fetchRemoteEvalCall({host:t,clientKey:i,payload:{attributes:e.getAttributes(),forcedVariations:e.getForcedVariations(),forcedFeatures:Array.from(e.getForcedFeatures().entries()),url:e.getUrl()},headers:r}):f.fetchFeaturesCall({host:t,clientKey:i,headers:r});u=o.then(e=>{if(!e.ok)throw Error("HTTP error: ".concat(e.status));return"enabled"===e.headers.get("x-sse-support")&&v.add(s),e.json()}).then(t=>(onNewFeatureData(s,a,t),startAutoRefresh(e),_.delete(a),t)).catch(e=>(_.delete(a),Promise.resolve({}))),_.set(a,u)}return await u}function startAutoRefresh(e){let t=getKey(e),r=getCacheKey(e),{streamingHost:i,streamingHostRequestHeaders:n}=e.getApiHosts(),s=e.getClientKey();if(h.backgroundSync&&v.has(t)&&d.EventSource){if(y.has(t))return;let e={src:null,host:i,clientKey:s,headers:n,cb:i=>{try{if("features-updated"===i.type){let e=p.get(t);e&&e.forEach(e=>{fetchFeatures(e)})}else if("features"===i.type){let e=JSON.parse(i.data);onNewFeatureData(t,r,e)}e.errors=0}catch(t){onSSEError(e)}},errors:0,state:"active"};y.set(t,e),enableChannel(e)}}function onSSEError(e){if("idle"!==e.state&&(e.errors++,e.errors>3||e.src&&2===e.src.readyState)){let t=Math.pow(3,e.errors-3)*(1e3+1e3*Math.random());disableChannel(e),setTimeout(()=>{["idle","active"].includes(e.state)||enableChannel(e)},Math.min(t,3e5))}}function disableChannel(e){e.src&&(e.src.onopen=null,e.src.onerror=null,e.src.close(),e.src=null,"active"===e.state&&(e.state="disabled"))}function enableChannel(e){e.src=f.eventSourceCall({host:e.host,clientKey:e.clientKey,headers:e.headers}),e.state="active",e.src.addEventListener("features",e.cb),e.src.addEventListener("features-updated",e.cb),e.src.onerror=()=>onSSEError(e),e.src.onopen=()=>{e.errors=0}}let b="undefined"!=typeof window&&"undefined"!=typeof document,k=function(){let e;try{e="0.36.0"}catch(t){e=""}return e}();let GrowthBook=class GrowthBook{constructor(e){if(e=e||{},this.version=k,this._ctx=this.context=e,this._renderer=null,this._trackedExperiments=new Set,this._trackedFeatures={},this.debug=!1,this._subscriptions=new Set,this._rtQueue=[],this._rtTimer=0,this.ready=!1,this._assigned=new Map,this._forcedFeatureValues=new Map,this._attributeOverrides={},this._activeAutoExperiments=new Map,this._triggeredExpKeys=new Set,this._loadFeaturesCalled=!1,this._redirectedUrl="",this._deferredTrackingCalls=[],e.renderer&&(this._renderer=e.renderer),e.remoteEval){if(e.decryptionKey)throw Error("Encryption is not available for remoteEval");if(!e.clientKey)throw Error("Missing clientKey");let t=!1;try{t=!!new URL(e.apiHost||"").hostname.match(/growthbook\.io$/i)}catch(e){}if(t)throw Error("Cannot use remoteEval on GrowthBook Cloud")}else if(e.cacheKeyAttributes)throw Error("cacheKeyAttributes are only used for remoteEval");e.features&&(this.ready=!0),b&&e.enableDevMode&&(window._growthbook=this,document.dispatchEvent(new Event("gbloaded"))),e.experiments?(this.ready=!0,this._updateAllAutoExperiments()):e.antiFlicker&&this._setAntiFlicker(),e.clientKey&&!e.remoteEval&&this._refresh({},!0,!1)}async loadFeatures(e){e&&e.autoRefresh&&(this._ctx.subscribeToChanges=!0),this._loadFeaturesCalled=!0,await this._refresh(e,!0,!0),this._canSubscribe()&&function(e){let t=getKey(e),r=p.get(t)||new Set;r.add(e),p.set(t,r)}(this)}async refreshFeatures(e){await this._refresh(e,!1,!0)}getApiInfo(){return[this.getApiHosts().apiHost,this.getClientKey()]}getApiHosts(){let e=this._ctx.apiHost||"https://cdn.growthbook.io";return{apiHost:e.replace(/\/*$/,""),streamingHost:(this._ctx.streamingHost||e).replace(/\/*$/,""),apiRequestHeaders:this._ctx.apiHostRequestHeaders,streamingHostRequestHeaders:this._ctx.streamingHostRequestHeaders}}getClientKey(){return this._ctx.clientKey||""}isRemoteEval(){return this._ctx.remoteEval||!1}getCacheKeyAttributes(){return this._ctx.cacheKeyAttributes}async _refresh(e,t,r){if(e=e||{},!this._ctx.clientKey)throw Error("Missing clientKey");await refreshFeatures(this,e.timeout,e.skipCache||this._ctx.enableDevMode,t,r,!1!==this._ctx.backgroundSync)}_render(){if(this._renderer)try{this._renderer()}catch(e){console.error("Failed to render",e)}}setFeatures(e){this._ctx.features=e,this.ready=!0,this._render()}async setEncryptedFeatures(e,t,r){let i=await decrypt(e,t||this._ctx.decryptionKey,r);this.setFeatures(JSON.parse(i))}setExperiments(e){this._ctx.experiments=e,this.ready=!0,this._updateAllAutoExperiments()}async setEncryptedExperiments(e,t,r){let i=await decrypt(e,t||this._ctx.decryptionKey,r);this.setExperiments(JSON.parse(i))}async decryptPayload(e,t,r){return e.encryptedFeatures&&(e.features=JSON.parse(await decrypt(e.encryptedFeatures,t||this._ctx.decryptionKey,r)),delete e.encryptedFeatures),e.encryptedExperiments&&(e.experiments=JSON.parse(await decrypt(e.encryptedExperiments,t||this._ctx.decryptionKey,r)),delete e.encryptedExperiments),e}async setAttributes(e){if(this._ctx.attributes=e,this._ctx.stickyBucketService&&await this.refreshStickyBuckets(),this._ctx.remoteEval){await this._refreshForRemoteEval();return}this._render(),this._updateAllAutoExperiments()}async updateAttributes(e){return this.setAttributes({...this._ctx.attributes,...e})}async setAttributeOverrides(e){if(this._attributeOverrides=e,this._ctx.stickyBucketService&&await this.refreshStickyBuckets(),this._ctx.remoteEval){await this._refreshForRemoteEval();return}this._render(),this._updateAllAutoExperiments()}async setForcedVariations(e){if(this._ctx.forcedVariations=e||{},this._ctx.remoteEval){await this._refreshForRemoteEval();return}this._render(),this._updateAllAutoExperiments()}setForcedFeatures(e){this._forcedFeatureValues=e,this._render()}async setURL(e){if(this._ctx.url=e,this._redirectedUrl="",this._ctx.remoteEval){await this._refreshForRemoteEval(),this._updateAllAutoExperiments(!0);return}this._updateAllAutoExperiments(!0)}getAttributes(){return{...this._ctx.attributes,...this._attributeOverrides}}getForcedVariations(){return this._ctx.forcedVariations||{}}getForcedFeatures(){return this._forcedFeatureValues||new Map}getStickyBucketAssignmentDocs(){return this._ctx.stickyBucketAssignmentDocs||{}}getUrl(){return this._ctx.url||""}getFeatures(){return this._ctx.features||{}}getExperiments(){return this._ctx.experiments||[]}subscribe(e){return this._subscriptions.add(e),()=>{this._subscriptions.delete(e)}}_canSubscribe(){return!1!==this._ctx.backgroundSync&&this._ctx.subscribeToChanges}async _refreshForRemoteEval(){this._ctx.remoteEval&&this._loadFeaturesCalled&&await this._refresh({},!1,!0).catch(()=>{})}getAllResults(){return new Map(this._assigned)}destroy(){var e;this._subscriptions.clear(),this._assigned.clear(),this._trackedExperiments.clear(),this._trackedFeatures={},this._rtQueue=[],this._rtTimer&&clearTimeout(this._rtTimer),e=this,p.forEach(t=>t.delete(e)),b&&window._growthbook===this&&delete window._growthbook,this._activeAutoExperiments.forEach(e=>{e.undo()}),this._activeAutoExperiments.clear(),this._triggeredExpKeys.clear()}setRenderer(e){this._renderer=e}forceVariation(e,t){if(this._ctx.forcedVariations=this._ctx.forcedVariations||{},this._ctx.forcedVariations[e]=t,this._ctx.remoteEval){this._refreshForRemoteEval();return}this._updateAllAutoExperiments(),this._render()}run(e){let t=this._run(e,null);return this._fireSubscriptions(e,t),t}triggerExperiment(e){if(this._triggeredExpKeys.add(e),!this._ctx.experiments)return null;let t=this._ctx.experiments.filter(t=>t.key===e);return t.map(e=>e.manual?this._runAutoExperiment(e):null).filter(e=>null!==e)}_runAutoExperiment(e,t){let r=this._activeAutoExperiments.get(e);if(e.manual&&!this._triggeredExpKeys.has(e.key)&&!r)return null;let i=this.run(e),n=JSON.stringify(i.value);if(!t&&i.inExperiment&&r&&r.valueHash===n)return i;if(r&&this._undoActiveAutoExperiment(e),i.inExperiment){if(i.value.urlRedirect&&e.urlPatterns){let t=e.persistQueryString?function(e,t){let r,i;try{r=new URL(e),i=new URL(t)}catch(e){return console.error("Unable to merge query strings: ".concat(e)),t}return r.searchParams.forEach((e,t)=>{i.searchParams.has(t)||i.searchParams.set(t,e)}),i.toString()}(this._getContextUrl(),i.value.urlRedirect):i.value.urlRedirect;if(isURLTargeted(t,e.urlPatterns))return this.log("Skipping redirect because original URL matches redirect URL",{id:e.key}),i;this._redirectedUrl=t;let r=this._getNavigateFunction();if(r){if(b){var s;this._setAntiFlicker(),window.setTimeout(()=>{try{r(t)}catch(e){console.error(e)}},null!==(s=this._ctx.navigateDelay)&&void 0!==s?s:100)}else try{r(t)}catch(e){console.error(e)}}}else{let t=this._applyDOMChanges(i.value);t&&this._activeAutoExperiments.set(e,{undo:t,valueHash:n})}}return i}_undoActiveAutoExperiment(e){let t=this._activeAutoExperiments.get(e);t&&(t.undo(),this._activeAutoExperiments.delete(e))}_isRedirectExperiment(e){return e.variations.some(e=>Object.keys(e).includes("urlRedirect"))}_updateAllAutoExperiments(e){let t=this._ctx.experiments||[],r=new Set(t);for(let i of(this._activeAutoExperiments.forEach((e,t)=>{r.has(t)||(e.undo(),this._activeAutoExperiments.delete(t))}),t)){let t=this._runAutoExperiment(i,e);if(null!=t&&t.inExperiment&&this._isRedirectExperiment(i))break}}_fireSubscriptions(e,t){let r=e.key,i=this._assigned.get(r);i&&i.result.inExperiment===t.inExperiment&&i.result.variationId===t.variationId||(this._assigned.set(r,{experiment:e,result:t}),this._subscriptions.forEach(r=>{try{r(e,t)}catch(e){console.error(e)}}))}_trackFeatureUsage(e,t){if("override"===t.source)return;let r=JSON.stringify(t.value);if(this._trackedFeatures[e]!==r){if(this._trackedFeatures[e]=r,this._ctx.onFeatureUsage)try{this._ctx.onFeatureUsage(e,t)}catch(e){}b&&window.fetch&&(this._rtQueue.push({key:e,on:t.on}),this._rtTimer||(this._rtTimer=window.setTimeout(()=>{this._rtTimer=0;let e=[...this._rtQueue];this._rtQueue=[],this._ctx.realtimeKey&&window.fetch("https://rt.growthbook.io/?key=".concat(this._ctx.realtimeKey,"&events=").concat(encodeURIComponent(JSON.stringify(e))),{cache:"no-cache",mode:"no-cors"}).catch(()=>{})},this._ctx.realtimeInterval||2e3)))}}_getFeatureResult(e,t,r,i,n,s){let a={value:t,on:!!t,off:!t,source:r,ruleId:i||""};return n&&(a.experiment=n),s&&(a.experimentResult=s),this._trackFeatureUsage(e,a),a}isOn(e){return this.evalFeature(e).on}isOff(e){return this.evalFeature(e).off}getFeatureValue(e,t){let r=this.evalFeature(e).value;return null===r?t:r}feature(e){return this.evalFeature(e)}evalFeature(e){return this._evalFeature(e)}_evalFeature(e,t){if((t=t||{evaluatedFeatures:new Set}).evaluatedFeatures.has(e))return this._getFeatureResult(e,null,"cyclicPrerequisite");if(t.evaluatedFeatures.add(e),t.id=e,this._forcedFeatureValues.has(e))return this._getFeatureResult(e,this._forcedFeatureValues.get(e),"override");if(!this._ctx.features||!this._ctx.features[e])return this._getFeatureResult(e,null,"unknownFeature");let r=this._ctx.features[e];if(r.rules)e:for(let i of r.rules){if(i.parentConditions)for(let r of i.parentConditions){let i=this._evalFeature(r.id,t);if("cyclicPrerequisite"===i.source)return this._getFeatureResult(e,null,"cyclicPrerequisite");let n={value:i.value},s=evalCondition(n,r.condition||{});if(!s){if(r.gate)return this._getFeatureResult(e,null,"prerequisite");continue e}}if(i.filters&&this._isFilteredOut(i.filters))continue;if("force"in i){if(i.condition&&!this._conditionPasses(i.condition)||!this._isIncludedInRollout(i.seed||e,i.hashAttribute,this._ctx.stickyBucketService&&!i.disableStickyBucketing?i.fallbackAttribute:void 0,i.range,i.coverage,i.hashVersion))continue;return i.tracks&&i.tracks.forEach(e=>{this._track(e.experiment,e.result)}),this._getFeatureResult(e,i.force,"force",i.id)}if(!i.variations)continue;let r={variations:i.variations,key:i.key||e};"coverage"in i&&(r.coverage=i.coverage),i.weights&&(r.weights=i.weights),i.hashAttribute&&(r.hashAttribute=i.hashAttribute),i.fallbackAttribute&&(r.fallbackAttribute=i.fallbackAttribute),i.disableStickyBucketing&&(r.disableStickyBucketing=i.disableStickyBucketing),void 0!==i.bucketVersion&&(r.bucketVersion=i.bucketVersion),void 0!==i.minBucketVersion&&(r.minBucketVersion=i.minBucketVersion),i.namespace&&(r.namespace=i.namespace),i.meta&&(r.meta=i.meta),i.ranges&&(r.ranges=i.ranges),i.name&&(r.name=i.name),i.phase&&(r.phase=i.phase),i.seed&&(r.seed=i.seed),i.hashVersion&&(r.hashVersion=i.hashVersion),i.filters&&(r.filters=i.filters),i.condition&&(r.condition=i.condition);let n=this._run(r,e);if(this._fireSubscriptions(r,n),n.inExperiment&&!n.passthrough)return this._getFeatureResult(e,n.value,"experiment",i.id,r,n)}return this._getFeatureResult(e,void 0===r.defaultValue?null:r.defaultValue,"defaultValue")}_isIncludedInRollout(e,t,r,i,n,s){if(!i&&void 0===n)return!0;let{hashValue:a}=this._getHashAttribute(t,r);if(!a)return!1;let u=hash(e,a,s||1);return null!==u&&(i?inRange(u,i):void 0===n||u<=n)}_conditionPasses(e){return evalCondition(this.getAttributes(),e)}_isFilteredOut(e){return e.some(e=>{let{hashValue:t}=this._getHashAttribute(e.attribute);if(!t)return!0;let r=hash(e.seed,t,e.hashVersion||2);return null===r||!e.ranges.some(e=>inRange(r,e))})}_run(e,t){let r=e.key,i=e.variations.length;if(i<2||!1===this._ctx.enabled||(e=this._mergeOverrides(e)).urlPatterns&&!isURLTargeted(this._getContextUrl(),e.urlPatterns))return this._getResult(e,-1,!1,t);let n=function(e,t,r){if(!t)return null;let i=t.split("?")[1];if(!i)return null;let n=i.replace(/#.*/,"").split("&").map(e=>e.split("=",2)).filter(t=>{let[r]=t;return r===e}).map(e=>{let[,t]=e;return parseInt(t)});return n.length>0&&n[0]>=0&&n[0]=0,u=t,c=!!r}if(!o){if(e.filters){if(this._isFilteredOut(e.filters))return this._getResult(e,-1,!1,t)}else if(e.namespace&&!function(e,t){let r=hash("__"+t[0],e,1);return null!==r&&r>=t[1]&&r1&&(t=1);let i=e<=0?[]:Array(e).fill(1/e);(r=r||i).length!==e&&(r=i);let n=r.reduce((e,t)=>t+e,0);(n<.99||n>1.01)&&(r=i);let s=0;return r.map(e=>{let r=s;return s+=e,[r,r+t*e]})}(i,void 0===e.coverage?1:e.coverage,e.weights);u=function(e,t){for(let r=0;r{t&&t.experiment&&t.result?this._track(t.experiment,t.result):(console.error("Invalid deferred tracking call",{call:t}),e=!0)}),this._deferredTrackingCalls=[],e)throw Error("Invalid tracking data")}setTrackingCallback(e){this._ctx.trackingCallback=e;try{this.fireDeferredTrackingCalls()}catch(e){console.error(e)}}_track(e,t){if(!this._ctx.trackingCallback){this._deferredTrackingCalls.push({experiment:e,result:t});return}let r=e.key,i=t.hashAttribute+t.hashValue+r+t.variationId;if(!this._trackedExperiments.has(i)){this._trackedExperiments.add(i);try{this._ctx.trackingCallback(e,t)}catch(e){console.error(e)}}}_mergeOverrides(e){let t=e.key,r=this._ctx.overrides;return r&&r[t]&&"string"==typeof(e=Object.assign({},e,r[t])).url&&(e.url=getUrlRegExp(e.url)),e}_getHashAttribute(e,t){let r=e||"id",i="";return this._attributeOverrides[r]?i=this._attributeOverrides[r]:this._ctx.attributes?i=this._ctx.attributes[r]||"":this._ctx.user&&(i=this._ctx.user[r]||""),!i&&t&&(this._attributeOverrides[t]?i=this._attributeOverrides[t]:this._ctx.attributes?i=this._ctx.attributes[t]||"":this._ctx.user&&(i=this._ctx.user[t]||""),i&&(r=t)),{hashAttribute:r,hashValue:i}}_getResult(e,t,r,i,n,s){let a=!0;(t<0||t>=e.variations.length)&&(t=0,a=!1);let{hashAttribute:u,hashValue:o}=this._getHashAttribute(e.hashAttribute,this._ctx.stickyBucketService&&!e.disableStickyBucketing?e.fallbackAttribute:void 0),c=e.meta?e.meta[t]:{},l={key:c.key||""+t,featureId:i,inExperiment:a,hashUsed:r,variationId:t,value:e.variations[t],hashAttribute:u,hashValue:o,stickyBucketUsed:!!s};return c.name&&(l.name=c.name),void 0!==n&&(l.bucket=n),c.passthrough&&(l.passthrough=c.passthrough),l}_getContextUrl(){return this._ctx.url||(b?window.location.href:"")}_urlIsValid(e){let t=this._getContextUrl();if(!t)return!1;let r=t.replace(/^https?:\/\//,"").replace(/^[^/]*\//,"/");return!!(e.test(t)||e.test(r))}_hasGroupOverlap(e){let t=this._ctx.groups||{};for(let r=0;r{window.location.replace(e)}:null}_setAntiFlicker(){if(this._ctx.antiFlicker&&b)try{var e;let t=document.createElement("style");t.innerHTML=".gb-anti-flicker { opacity: 0 !important; pointer-events: none; }",document.head.appendChild(t),document.documentElement.classList.add("gb-anti-flicker"),setTimeout(()=>{document.documentElement.classList.remove("gb-anti-flicker")},null!==(e=this._ctx.antiFlickerTimeout)&&void 0!==e?e:3500)}catch(e){console.error(e)}}_applyDOMChanges(e){if(!b)return;let t=[];if(e.css){let r=document.createElement("style");r.innerHTML=e.css,document.head.appendChild(r),t.push(()=>r.remove())}if(e.js){let r=document.createElement("script");r.innerHTML=e.js,document.head.appendChild(r),t.push(()=>r.remove())}return e.domMutations&&e.domMutations.forEach(e=>{t.push(c.declarative(e).revert)}),()=>{t.forEach(e=>e())}}_deriveStickyBucketIdentifierAttributes(e){let t=new Set,r=e&&e.features?e.features:this.getFeatures(),i=e&&e.experiments?e.experiments:this.getExperiments();return Object.keys(r).forEach(e=>{let i=r[e];if(i.rules)for(let e of i.rules)e.variations&&(t.add(e.hashAttribute||"id"),e.fallbackAttribute&&t.add(e.fallbackAttribute))}),i.map(e=>{t.add(e.hashAttribute||"id"),e.fallbackAttribute&&t.add(e.fallbackAttribute)}),Array.from(t)}async refreshStickyBuckets(e){if(this._ctx.stickyBucketService){let t=this._getStickyBucketAttributes(e);this._ctx.stickyBucketAssignmentDocs=await this._ctx.stickyBucketService.getAllAssignments(t)}}_getStickyBucketAssignments(){let e={};return Object.values(this._ctx.stickyBucketAssignmentDocs||{}).forEach(t=>{t.assignments&&Object.assign(e,t.assignments)}),e}_getStickyBucketVariation(e,t,r,i){t=t||0,r=r||0,i=i||[];let n=this._getStickyBucketExperimentKey(e,t),s=this._getStickyBucketAssignments();if(r>0)for(let t=0;t<=r;t++){let r=this._getStickyBucketExperimentKey(e,t);if(void 0!==s[r])return{variation:-1,versionIsBlocked:!0}}let a=s[n];if(void 0===a)return{variation:-1};let u=i.findIndex(e=>e.key===a);return u<0?{variation:-1}:{variation:u}}_getStickyBucketExperimentKey(e,t){return t=t||0,"".concat(e,"__").concat(t)}_getStickyBucketAttributes(e){let t={};return this._ctx.stickyBucketIdentifierAttributes=this._ctx.stickyBucketIdentifierAttributes?this._ctx.stickyBucketIdentifierAttributes:this._deriveStickyBucketIdentifierAttributes(e),this._ctx.stickyBucketIdentifierAttributes.forEach(e=>{let{hashValue:r}=this._getHashAttribute(e);t[e]=util_toString(r)}),t}_generateStickyBucketAssignmentDoc(e,t,r){let i="".concat(e,"||").concat(t),n=this._ctx.stickyBucketAssignmentDocs&&this._ctx.stickyBucketAssignmentDocs[i]&&this._ctx.stickyBucketAssignmentDocs[i].assignments||{},s={...n,...r},a=JSON.stringify(n)!==JSON.stringify(s);return{key:i,doc:{attributeName:e,attributeValue:t,assignments:s},changed:a}}}},26634:function(e){e.exports=function(){"use strict";function assign(e){for(var t=1;t0?new o.K4({graphQLErrors:n}):void 0;if(l===f.current.mutationId&&!h.ignoreResults){var u={called:!0,loading:!1,data:i,error:s,client:c};f.current.isMounted&&!(0,a.L)(f.current.result,u)&&d(f.current.result=u)}var p=e.onCompleted||(null===(r=f.current.options)||void 0===r?void 0:r.onCompleted);return null==p||p(t.data,h),t}).catch(function(t){if(l===f.current.mutationId&&f.current.isMounted){var r,i={loading:!1,error:t,data:void 0,called:!0,client:c};(0,a.L)(f.current.result,i)||d(f.current.result=i)}var n=e.onError||(null===(r=f.current.options)||void 0===r?void 0:r.onError);if(n)return n(t,h),{data:void 0,errors:t};throw t})},[]),g=(0,n.useCallback)(function(){f.current.isMounted&&d({called:!1,loading:!1,client:r})},[]);return(0,n.useEffect)(function(){return f.current.isMounted=!0,function(){f.current.isMounted=!1}},[]),[p,(0,i.Cl)({reset:g},h)]}},68256:function(e,t,r){"use strict";r.d(t,{n:function(){return useMutation}});var i=r(77059),n=r(30001),s=r(78852),a=r(92127),u=r(14181),o=class extends a.Q{constructor(e,t){super(),this.#e=void 0,this.#t=e,this.setOptions(t),this.bindMethods(),this.#r()}#t;#e;#i;#n;bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#t.defaultMutationOptions(e),(0,u.f8)(t,this.options)||this.#t.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#i,observer:this}),this.#i?.setOptions(this.options),t?.mutationKey&&this.options.mutationKey&&(0,u.EN)(t.mutationKey)!==(0,u.EN)(this.options.mutationKey)&&this.reset()}onUnsubscribe(){this.hasListeners()||this.#i?.removeObserver(this)}onMutationUpdate(e){this.#r(),this.#s(e)}getCurrentResult(){return this.#e}reset(){this.#i?.removeObserver(this),this.#i=void 0,this.#r(),this.#s()}mutate(e,t){return this.#n=t,this.#i?.removeObserver(this),this.#i=this.#t.getMutationCache().build(this.#t,this.options),this.#i.addObserver(this),this.#i.execute(e)}#r(){let e=this.#i?.state??(0,n.$)();this.#e={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#s(e){s.j.batch(()=>{this.#n&&this.hasListeners()&&(e?.type==="success"?(this.#n.onSuccess?.(e.data,this.#e.variables,this.#e.context),this.#n.onSettled?.(e.data,null,this.#e.variables,this.#e.context)):e?.type==="error"&&(this.#n.onError?.(e.error,this.#e.variables,this.#e.context),this.#n.onSettled?.(void 0,e.error,this.#e.variables,this.#e.context))),this.listeners.forEach(e=>{e(this.#e)})})}},c=r(93402),l=r(9873);function useMutation(e,t){let r=(0,c.jE)(t),[n]=i.useState(()=>new o(r,e));i.useEffect(()=>{n.setOptions(e)},[n,e]);let a=i.useSyncExternalStore(i.useCallback(e=>n.subscribe(s.j.batchCalls(e)),[n]),()=>n.getCurrentResult(),()=>n.getCurrentResult()),u=i.useCallback((e,t)=>{n.mutate(e,t).catch(noop)},[n]);if(a.error&&(0,l.G)(n.options.throwOnError,[a.error]))throw a.error;return{...a,mutate:u,mutateAsync:a.mutate}}function noop(){}}}]);